home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
pbtool.exe
/
READDBF.BAS
< prev
next >
Wrap
BASIC Source File
|
1991-11-15
|
4KB
|
108 lines
'----------------------------------------------------------
' PROGRAM: READDBF.BAS PROGRAMMER: A. KELLETT
' DATE-WRITTEN: 11/14/91
' USING POWER BASIC V2.10A (NOT FOR TURBO BASIC)
'
' THIS PROGRAM READS THE CONTENTS OF A dBASE (TM) .DBF
' (THE DATA) FILE. DOES NOT LOOK AT INDEX (.NDX) FILES.
' VERSION: 0.00 LAST UPDATED: 00/00/00
'----------------------------------------------------------
CLS
FILE1EOF& = 0
INPUT "ENTER dBASE FILE NAME: ";FILENAME1$
GOSUB FILEEXISTS
MAP HEADER$$ * 32, 1 AS VERSION$$, 1 AS YEAR$$, 1 AS MONTH$$, 1 AS DAY$$,_
4 AS TOT.RECORDS$$, 2 AS HEADER.SIZE$$, 2 AS RECORD.LENGTH$$,_
20 AS FILLER$$
MAP FIELDHEADER$$ * 32, 10 AS FIELD.NAME$$, 1 AS FILLER1$$, _
1 AS FIELD.TYPE$$, 4 AS FILLER2$$, 1 AS FIELD.WIDTH$$,_
1 AS DECIMALS$$, 14 AS FILLER3$$
MAP FDATA$$ * 19, 10 AS FIELDNAME$$, 2 AS FIL1$$, 1 AS FTYPE$$,_
2 AS FIL2$$, 1 AS FWIDTH$$, 2 AS FIL3$$, 1 AS FDECIMAL$$
OPEN FILENAME1$ FOR BINARY AS #1
GET$ 1, 32, HEADER$$
X1 = ASC(LEFT$(TOT.RECORDS$$,1)):X2 = ASC(MID$(TOT.RECORDS$$,2,1))
X3 = ASC(MID$(TOT.RECORDS$$,3,1)):X4 = ASC(RIGHT$(TOT.RECORDS$$,1))
TOT.RECORDS& = X1 + (256 * X2) + (4096 * X3) + (65536 * X4)
HEADER.SIZE& = ASC(LEFT$(HEADER.SIZE$$,1))_
+ (256 * ASC(RIGHT$(HEADER.SIZE$$,1)))
RECORD.LENGTH& = ASC(LEFT$(RECORD.LENGTH$$,1))_
+ (256 * ASC(RIGHT$(RECORD.LENGTH$$,1)))
NUM.FIELDS& = ((HEADER.SIZE& - 1) \ 32) - 1
LOCATE 2,5:PRINT "dBASE VERSION: ";ASC(VERSION$$)
LOCATE 3,5:PRINT "MODIFIED YR: ";ASC(YEAR$$)
LOCATE 4,5:PRINT " MM: ";ASC(MONTH$$)
LOCATE 5,5:PRINT " DD: ";ASC(DAY$$)
LOCATE 6,5:PRINT "TOT RECORDS : ";TOT.RECORDS&
LOCATE 7,5:PRINT "HEADER SIZE : ";HEADER.SIZE&
LOCATE 8,5:PRINT "RECORD LENGTH: ";RECORD.LENGTH&
LOCATE 9,5:PRINT "NUMBER FIELDS: ";NUM.FIELDS&
DIM FIELD.DATA$(1:NUM.FIELDS&)
FOR I% = 1 TO NUM.FIELDS&
GET$ 1, 32, FIELDHEADER$$
FIELD.WIDTH% = ASC(FIELD.WIDTH$$)
FIELD.WIDTH$ = USING$("##", FIELD.WIDTH%)
IF DECIMALS$$ = CHR$(0) THEN
DECIMALS% = 0:FDECIMAL$$ = "0"
ELSE
DECIMALS% = ASC(DECIMALS$$):FDECIMAL$$ = DECIMAL$$
END IF
LOCATE 10,1:PRINT "FIELD NAME : ";FIELD.NAME$$
LOCATE 11,1:PRINT "FIELD TYPE : ";FIELD.TYPE$$
LOCATE 12,1:PRINT "FIELD WIDTH : ";FIELD.WIDTH%
LOCATE 13,1:PRINT "DECIMALS : ";DECIMALS%
FIELD.DATA$(I%) = FIELD.NAME$$ + " " + FIELD.TYPE$$ +_
" " + FIELD.WIDTH$ + " " + FDECIMAL$$
NEXT I%
DELAY 3
FOR I% = 1 TO TOT.RECORDS&
GET$ 1, 1, DELFLAG$
GET$ 1, RECORD.LENGTH&, RECORD1$
CLS
LOCATE 4,20:PRINT USING "RECORD NUM ##,###";I%
LOCATE 5,1:PRINT RECORD1$
DELAY 1
NEXT I%
LOCATE 23,1
CLOSE #1
END
'
'
'----------------------------------------------------------
FILEEXISTS:
OPEN FILENAME1$ FOR BINARY AS #1
IF LOF(1) < 1 THEN '** FILE LENGTH LESS THAN 0 **
LOCATE 15,5
PRINT "THE INPUT FILE DOES NOT EXISTS."
CLOSE #1 '** CLOSE THE NON-EXISTANT FILE **
KILL FILENAME1$ '** DELETE 0 LENGTH FILE WE'VE CREATED **
DELAY 2.5 '** PAUSE FOR USER TO READ MESSAGE **
LOCATE 22,1
END '** END PROCESSING HERE **
END IF
CLOSE #1 '** CLOSE IN CASE IT DID EXIST **
RETURN
'----------------------------------------------------------
' Information on the structure of dBASE .DBF files were
' obtained from the following two sources:
'
' dBASE III Plus Programmer's Reference Guide pp.859 - 875
' by Alan Simpson ( 1987 SYBEX Inc.) No dBASE programmer
' should ever be more than arms-length away from this book.
'
' BASIC Techniques and Utilities p. 251 by Ethan Winer
' ( 1991 Ziff-Davis Press ). Never thought about reading dBASE
' files from Turbo/PowerBasic until I stumbled over his
' easy-to-understand chapter. Did not use his code as a model.
'
'